
#ifndef RSTRING_H
#define RSTRING_H

// Std includes.
#include <variant_string.h>

// CSharp includes.
#include <Typedef.h>
#include <Defines.h>

// Riccsson includes.
#include <System/Object.h>
#include <System/Array.h>
#include <System/IComparable.h>
#include <System/ICloneable.h>
#include <System/IConvertible.h>
#include <System/Generic/IEquatable.h>
#include <System/Generic/IComparable.h>


namespace Riccsson
{
	namespace System
	{
		namespace Collections
		{
			namespace Generic
			{
				template<typename TKey, typename TValue> class Dictionary;
			}
		}

		class StringComparison;

		// Summary:
		//     Represents text as a series of Unicode characters.
		class String
			: public Object
			, public IComparable
			, public ICloneable
			, public Generic::IComparable<String>
			, public Generic::IEquatable<String>
		{
			REGISTER_CLASS(String)

		private:
			const char* internalString;
			int _Length;
		public:
			String();
			virtual ~String();

			static GC_PTR<Collections::Generic::Dictionary<void*, GC_PTR<String>>> _global_list_of_static_const_strings;

			const char* string_copy( const char* str, const int& length );
			const char* string_copy_nullTerminal( const char* str, int& out_length );

			PROP3GET_DEF(String, int, Length);
			
			COPY_CONSTRUCTOR(String)
			{
				PROP3GET_INIT_COPY(String, int, Length);
				
				internalString = string_copy( other.internalString, other._Length );
				_Length = other._Length;
			}

			/*
			// Summary:
			//     Gets the character at a specified character position in the current System.String
			//     object.
			//
			// Parameters:
			//   index:
			//     A character position in the current string.
			//
			// Returns:
			//     A Unicode character.
			//
			// Exceptions:
			//   System.IndexOutOfRangeException:
			//     index is greater than or equal to the length of this object or less than
			//     zero.
			char this[int index] { get; }
			*/
			virtual char operator[](int index) const;
			virtual String& operator+=(const char * other);
			virtual String& operator+=(const String& other);
			virtual const String operator+(double number) const;
			virtual const String operator+(const char* other) const;
			virtual const String operator+(const String& other) const;
			
			const String& operator=(const char* str);
			
			const char* c_str() const;
			
			// Summary:
			//     Represents the empty string. This field is read-only.
			static const String Empty;

			// Summary:
			//     Initializes a new instance of the System.String class to the value indicated
			//     by an array of Unicode characters.
			//
			// Parameters:
			//   value:
			//     An array of Unicode characters.
			//[SecuritySafeCritical]
			String(Riccsson::System::Array<char>* str);
			
			String(const char* str);

			//
			// Summary:
			//     Initializes a new instance of the System.String class to the value indicated
			//     by a specified Unicode character repeated a specified number of times.
			//
			// Parameters:
			//   c:
			//     A Unicode character.
			//
			//   count:
			//     The number of times c occurs.
			//
			// Exceptions:
			//   System.ArgumentOutOfRangeException:
			//     count is less than zero.
			//[SecuritySafeCritical]
			String(char c, int count);

			//
			// Summary:
			//     Initializes a new instance of the System.String class to the value indicated
			//     by an array of Unicode characters, a starting character position within that
			//     array, and a length.
			//
			// Parameters:
			//   value:
			//     An array of Unicode characters.
			//
			//   startIndex:
			//     The starting position within value.
			//
			//   length:
			//     The number of characters within value to use.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			//
			//   System.ArgumentOutOfRangeException:
			//     startIndex or length is less than zero.-or- The sum of startIndex and length
			//     is greater than the number of elements in value.
			//[SecuritySafeCritical]
			String(Riccsson::System::Array<char>* value, int startIndex, int length);

			String(const char* value, int startIndex, int length);

			String(const byte* value, int startIndex, int length);
			
			// Summary:
			//     Gets the number of characters in the current System.String object.
			//
			// Returns:
			//     The number of characters in the current string.
			public: PROP3_GET(int, Length);

			// Summary:
			//     Returns a reference to this instance of System.String.
			//
			// Returns:
			//     This instance of System.String.
			GC_PTR<Object> Clone();

			
			//
			// Summary:
			//     Compares two specified System.String objects and returns an integer that
			//     indicates their relative position in the sort order.
			//
			// Parameters:
			//   strA:
			//     The first string to compare.
			//
			//   strB:
			//     The second string to compare.
			//
			// Returns:
			//     A 32-bit signed integer that indicates the lexical relationship between the
			//     two comparands.Value Condition Less than zero strA is less than strB. Zero
			//     strA equals strB. Greater than zero strA is greater than strB.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//static int Compare(string strA, string strB);
			//
			// Summary:
			//     Compares two specified System.String objects, ignoring or honoring their
			//     case, and returns an integer that indicates their relative position in the
			//     sort order.
			//
			// Parameters:
			//   strA:
			//     The first string to compare.
			//
			//   strB:
			//     The second string to compare.
			//
			//   ignoreCase:
			//     true to ignore case during the comparison; otherwise, false.
			//
			// Returns:
			//     A 32-bit signed integer that indicates the lexical relationship between the
			//     two comparands.Value Condition Less than zero strA is less than strB. Zero
			//     strA equals strB. Greater than zero strA is greater than strB.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//static int Compare(string strA, string strB, bool ignoreCase);

			//
			// Summary:
			//     Compares two specified System.String objects using the specified rules, and
			//     returns an integer that indicates their relative position in the sort order.
			//
			// Parameters:
			//   strA:
			//     The first string to compare.
			//
			//   strB:
			//     The second string to compare.
			//
			//   comparisonType:
			//     One of the enumeration values that specifies the rules to use in the comparison.
			//
			// Returns:
			//     A 32-bit signed integer that indicates the lexical relationship between the
			//     two comparands.Value Condition Less than zero strA is less than strB. Zero
			//     strA equals strB. Greater than zero strA is greater than strB.
			//
			// Exceptions:
			//   System.ArgumentException:
			//     comparisonType is not a System.StringComparison value.
			//
			//   System.NotSupportedException:
			//     System.StringComparison is not supported.
			//[SecuritySafeCritical]
			//static int Compare(string strA, string strB, StringComparison comparisonType);

			//
			// Summary:
			//     Compares two specified System.String objects, ignoring or honoring their
			//     case, and using culture-specific information to influence the comparison,
			//     and returns an integer that indicates their relative position in the sort
			//     order.
			//
			// Parameters:
			//   strA:
			//     The first string to compare.
			//
			//   strB:
			//     The second string to compare.
			//
			//   ignoreCase:
			//     true to ignore case during the comparison; otherwise, false.
			//
			//   culture:
			//     An object that supplies culture-specific comparison information.
			//
			// Returns:
			//     A 32-bit signed integer that indicates the lexical relationship between the
			//     two comparands.Value Condition Less than zero strA is less than strB. Zero
			//     strA equals strB. Greater than zero strA is greater than strB.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     culture is null.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//static int Compare(string strA, string strB, bool ignoreCase, CultureInfo culture);

			//
			// Summary:
			//     Compares two specified System.String objects using the specified comparison
			//     options and culture-specific information to influence the comparison, and
			//     returns an integer that indicates the relationship of the two strings to
			//     each other in the sort order.
			//
			// Parameters:
			//   strA:
			//     The first string to compare.
			//
			//   strB:
			//     The second string to compare.
			//
			//   culture:
			//     The culture that supplies culture-specific comparison information.
			//
			//   options:
			//     Options to use when performing the comparison (such as ignoring case or symbols).
			//
			// Returns:
			//     A 32-bit signed integer that indicates the lexical relationship between strA
			//     and strB, as shown in the following tableValueConditionLess than zerostrA
			//     is less than strB.ZerostrA equals strB.Greater than zerostrA is greater than
			//     strB.
			//
			// Exceptions:
			//   System.ArgumentException:
			//     options is not a System.Globalization.CompareOptions value.
			//
			//   System.ArgumentNullException:
			//     culture is null.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//tatic int Compare(string strA, string strB, CultureInfo culture, CompareOptions options);

			//
			// Summary:
			//     Compares substrings of two specified System.String objects and returns an
			//     integer that indicates their relative position in the sort order.
			//
			// Parameters:
			//   strA:
			//     The first string to use in the comparison.
			//
			//   indexA:
			//     The position of the substring within strA.
			//
			//   strB:
			//     The second string to use in the comparison.
			//
			//   indexB:
			//     The position of the substring within strB.
			//
			//   length:
			//     The maximum number of characters in the substrings to compare.
			//
			// Returns:
			//     A 32-bit signed integer indicating the lexical relationship between the two
			//     comparands.Value Condition Less than zero The substring in strA is less than
			//     the substring in strB. Zero The substrings are equal, or length is zero.
			//     Greater than zero The substring in strA is greater than the substring in
			//     strB.
			//
			// Exceptions:
			//   System.ArgumentOutOfRangeException:
			//     indexA is greater than strA.System.String.Length.-or- indexB is greater than
			//     strB.System.String.Length.-or- indexA, indexB, or length is negative. -or-Either
			//     indexA or indexB is null, and length is greater than zero.
			//static int Compare(string strA, int indexA, string strB, int indexB, int length);

			//
			// Summary:
			//     Compares substrings of two specified System.String objects, ignoring or honoring
			//     their case, and returns an integer that indicates their relative position
			//     in the sort order.
			//
			// Parameters:
			//   strA:
			//     The first string to use in the comparison.
			//
			//   indexA:
			//     The position of the substring within strA.
			//
			//   strB:
			//     The second string to use in the comparison.
			//
			//   indexB:
			//     The position of the substring within strB.
			//
			//   length:
			//     The maximum number of characters in the substrings to compare.
			//
			//   ignoreCase:
			//     true to ignore case during the comparison; otherwise, false.
			//
			// Returns:
			//     A 32-bit signed integer that indicates the lexical relationship between the
			//     two comparands.ValueCondition Less than zero The substring in strA is less
			//     than the substring in strB. Zero The substrings are equal, or length is zero.
			//     Greater than zero The substring in strA is greater than the substring in
			//     strB.
			//
			// Exceptions:
			//   System.ArgumentOutOfRangeException:
			//     indexA is greater than strA.System.String.Length.-or- indexB is greater than
			//     strB.System.String.Length.-or- indexA, indexB, or length is negative. -or-Either
			//     indexA or indexB is null, and length is greater than zero.
			//static int Compare(string strA, int indexA, string strB, int indexB, int length, bool ignoreCase);

			//
			// Summary:
			//     Compares substrings of two specified System.String objects using the specified
			//     rules, and returns an integer that indicates their relative position in the
			//     sort order.
			//
			// Parameters:
			//   strA:
			//     The first string to use in the comparison.
			//
			//   indexA:
			//     The position of the substring within strA.
			//
			//   strB:
			//     The second string to use in the comparison.
			//
			//   indexB:
			//     The position of the substring within strB.
			//
			//   length:
			//     The maximum number of characters in the substrings to compare.
			//
			//   comparisonType:
			//     One of the enumeration values that specifies the rules to use in the comparison.
			//
			// Returns:
			//     A 32-bit signed integer that indicates the lexical relationship between the
			//     two comparands.Value Condition Less than zero The substring in the strA parameter
			//     is less than the substring in the strB parameter.Zero The substrings are
			//     equal, or the length parameter is zero. Greater than zero The substring in
			//     strA is greater than the substring in strB.
			//
			// Exceptions:
			//   System.ArgumentOutOfRangeException:
			//     indexA is greater than strA.System.String.Length.-or- indexB is greater than
			//     strB.System.String.Length.-or- indexA, indexB, or length is negative. -or-Either
			//     indexA or indexB is null, and length is greater than zero.
			//
			//   System.ArgumentException:
			//     comparisonType is not a System.StringComparison value.
			//[SecuritySafeCritical]
			//static int Compare(string strA, int indexA, string strB, int indexB, int length, StringComparison comparisonType);

			//
			// Summary:
			//     Compares substrings of two specified System.String objects, ignoring or honoring
			//     their case and using culture-specific information to influence the comparison,
			//     and returns an integer that indicates their relative position in the sort
			//     order.
			//
			// Parameters:
			//   strA:
			//     The first string to use in the comparison.
			//
			//   indexA:
			//     The position of the substring within strA.
			//
			//   strB:
			//     The second string to use in the comparison.
			//
			//   indexB:
			//     The position of the substring within strB.
			//
			//   length:
			//     The maximum number of characters in the substrings to compare.
			//
			//   ignoreCase:
			//     true to ignore case during the comparison; otherwise, false.
			//
			//   culture:
			//     An object that supplies culture-specific comparison information.
			//
			// Returns:
			//     An integer that indicates the lexical relationship between the two comparands.Value
			//     Condition Less than zero The substring in strA is less than the substring
			//     in strB. Zero The substrings are equal, or length is zero. Greater than zero
			//     The substring in strA is greater than the substring in strB.
			//
			// Exceptions:
			//   System.ArgumentOutOfRangeException:
			//     indexA is greater than strA.System.String.Length.-or- indexB is greater than
			//     strB.System.String.Length.-or- indexA, indexB, or length is negative. -or-Either
			//     strA or strB is null, and length is greater than zero.
			//
			//   System.ArgumentNullException:
			//     culture is null.
			//static int Compare(string strA, int indexA, string strB, int indexB, int length, bool ignoreCase, CultureInfo culture);

			//
			// Summary:
			//     Compares substrings of two specified System.String objects using the specified
			//     comparison options and culture-specific information to influence the comparison,
			//     and returns an integer that indicates the relationship of the two substrings
			//     to each other in the sort order.
			//
			// Parameters:
			//   strA:
			//     The first string to use in the comparison.
			//
			//   indexA:
			//     The starting position of the substring within strA.
			//
			//   strB:
			//     The second string to use in the comparison.
			//
			//   indexB:
			//     The starting position of the substring within strB.
			//
			//   length:
			//     The maximum number of characters in the substrings to compare.
			//
			//   culture:
			//     An object that supplies culture-specific comparison information.
			//
			//   options:
			//     Options to use when performing the comparison (such as ignoring case or symbols).
			//
			// Returns:
			//     An integer that indicates the lexical relationship between the two substrings,
			//     as shown in the following table.ValueConditionLess than zeroThe substring
			//     in strA is less than the substring in strB.ZeroThe substrings are equal or
			//     length is zero.Greater than zeroThe substring in strA is greater than the
			//     substring in strB.
			//
			// Exceptions:
			//   System.ArgumentException:
			//     options is not a System.Globalization.CompareOptions value.
			//
			//   System.ArgumentOutOfRangeException:
			//     indexA is greater than strA.Length.-or-indexB is greater than strB.Length.-or-indexA,
			//     indexB, or length is negative.-or-Either strA or strB is null, and length
			//     is greater than zero.
			//
			//   System.ArgumentNullException:
			//     culture is null.
			//static int Compare(string strA, int indexA, string strB, int indexB, int length, CultureInfo culture, CompareOptions options);

			//
			// Summary:
			//     Compares two specified System.String objects by evaluating the numeric values
			//     of the corresponding System.Char objects in each string.
			//
			// Parameters:
			//   strA:
			//     The first string to compare.
			//
			//   strB:
			//     The second string to compare.
			//
			// Returns:
			//     An integer that indicates the lexical relationship between the two comparands.ValueCondition
			//     Less than zero strA is less than strB. Zero strA and strB are equal. Greater
			//     than zero strA is greater than strB.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//static int CompareOrdinal(string strA, string strB);

			//
			// Summary:
			//     Compares substrings of two specified System.String objects by evaluating
			//     the numeric values of the corresponding System.Char objects in each substring.
			//
			// Parameters:
			//   strA:
			//     The first string to use in the comparison.
			//
			//   indexA:
			//     The starting index of the substring in strA.
			//
			//   strB:
			//     The second string to use in the comparison.
			//
			//   indexB:
			//     The starting index of the substring in strB.
			//
			//   length:
			//     The maximum number of characters in the substrings to compare.
			//
			// Returns:
			//     A 32-bit signed integer that indicates the lexical relationship between the
			//     two comparands.ValueCondition Less than zero The substring in strA is less
			//     than the substring in strB. Zero The substrings are equal, or length is zero.
			//     Greater than zero The substring in strA is greater than the substring in
			//     strB.
			//
			// Exceptions:
			//   System.ArgumentOutOfRangeException:
			//     indexA is greater than strA. System.String.Length.-or- indexB is greater
			//     than strB. System.String.Length.-or- indexA, indexB, or length is negative.
			//[SecuritySafeCritical]
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//static int CompareOrdinal(string strA, int indexA, string strB, int indexB, int length);
			

			private: int CompareChar(char first, char second);

			//
			// Summary:
			//     Compares this instance with a specified System.Object and indicates whether
			//     this instance precedes, follows, or appears in the same position in the sort
			//     order as the specified System.Object.
			//
			// Parameters:
			//   value:
			//     An object that evaluates to a System.String.
			//
			// Returns:
			//     A 32-bit signed integer that indicates whether this instance precedes, follows,
			//     or appears in the same position in the sort order as the value parameter.Value
			//     Condition Less than zero This instance precedes value. Zero This instance
			//     has the same position in the sort order as value. Greater than zero This
			//     instance follows value.-or- value is null.
			//
			// Exceptions:
			//   System.ArgumentException:
			//     value is not a System.String.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			public: int CompareTo(Object* value);
			//
			// Summary:
			//     Compares this instance with a specified System.String object and indicates
			//     whether this instance precedes, follows, or appears in the same position
			//     in the sort order as the specified System.String.
			//
			// Parameters:
			//   strB:
			//     The string to compare with this instance.
			//
			// Returns:
			//     A 32-bit signed integer that indicates whether this instance precedes, follows,
			//     or appears in the same position in the sort order as the value parameter.Value
			//     Condition Less than zero This instance precedes strB. Zero This instance
			//     has the same position in the sort order as strB. Greater than zero This instance
			//     follows strB.-or- strB is null.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			public: int CompareTo(String* strB);

			/*
			//
			// Summary:
			//     Concatenates the members of a constructed System.Collections.Generic.IEnumerable<T>
			//     collection of type System.String.
			//
			// Parameters:
			//   values:
			//     A collection object that implements System.Collections.Generic.IEnumerable<T>
			//     and whose generic type argument is System.String.
			//
			// Returns:
			//     The concatenated strings in values.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     values is null.
			//[ComVisible(false)]
			static string Concat(IEnumerable<string> values);
			//
			// Summary:
			//     Concatenates the members of an System.Collections.Generic.IEnumerable<T>
			//     implementation.
			//
			// Parameters:
			//   values:
			//     A collection object that implements the System.Collections.Generic.IEnumerable<T>
			//     interface.
			//
			// Type parameters:
			//   T:
			//     The type of the members of values.
			//
			// Returns:
			//     The concatenated members in values.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     values is null.
			//[ComVisible(false)]
			static string Concat<T>(IEnumerable<T> values);
			//
			// Summary:
			//     Creates the System.String representation of a specified object.
			//
			// Parameters:
			//   arg0:
			//     The object to represent, or null.
			//
			// Returns:
			//     The string representation of the value of arg0.
			static string Concat(object arg0);
			//
			// Summary:
			//     Concatenates the System.String representations of the elements in a specified
			//     System.Object array.
			//
			// Parameters:
			//   args:
			//     An object array that contains the elements to concatenate.
			//
			// Returns:
			//     The concatenated string representations of the values of the elements in
			//     args.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     args is null.
			//
			//   System.OutOfMemoryException:
			//     Out of memory.
			static string Concat(params object[] args);
			//
			// Summary:
			//     Concatenates the elements of a specified System.String array.
			//
			// Parameters:
			//   values:
			//     An array of string instances.
			//
			// Returns:
			//     The concatenated elements of values.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     values is null.
			//
			//   System.OutOfMemoryException:
			//     Out of memory.
			static string Concat(params string[] values);
			//
			// Summary:
			//     Concatenates the string representations of two specified objects.
			//
			// Parameters:
			//   arg0:
			//     The first object to concatenate.
			//
			//   arg1:
			//     The second object to concatenate.
			//
			// Returns:
			//     The concatenated string representations of the values of arg0 and arg1.
			static string Concat(object arg0, object arg1);
			//
			// Summary:
			//     Concatenates two specified instances of System.String.
			//
			// Parameters:
			//   str0:
			//     The first string to concatenate.
			//
			//   str1:
			//     The second string to concatenate.
			//
			// Returns:
			//     The concatenation of str0 and str1.
			//[SecuritySafeCritical]
			static string Concat(string str0, string str1);
			//
			// Summary:
			//     Concatenates the string representations of three specified objects.
			//
			// Parameters:
			//   arg0:
			//     The first object to concatenate.
			//
			//   arg1:
			//     The second object to concatenate.
			//
			//   arg2:
			//     The third object to concatenate.
			//
			// Returns:
			//     The concatenated string representations of the values of arg0, arg1, and
			//     arg2.
			static string Concat(object arg0, object arg1, object arg2);
			//
			// Summary:
			//     Concatenates three specified instances of System.String.
			//
			// Parameters:
			//   str0:
			//     The first string to concatenate.
			//
			//   str1:
			//     The second string to concatenate.
			//
			//   str2:
			//     The third string to concatenate.
			//
			// Returns:
			//     The concatenation of str0, str1, and str2.
			//[SecuritySafeCritical]
			static string Concat(string str0, string str1, string str2);
			//
			// Summary:
			//     Concatenates the System.String representations of four specified objects
			//     and any objects specified in an optional variable length parameter list.
			//
			// Parameters:
			//   arg0:
			//     The first object to concatenate.
			//
			//   arg1:
			//     The second object to concatenate.
			//
			//   arg2:
			//     The third object to concatenate.
			//
			//   arg3:
			//     The fourth object to concatenate.
			//
			// Returns:
			//     The concatenated string representations of the values of the arg0, arg1,
			//     arg2, and arg3 parameters.
			//[CLSCompliant(false)]
			//[SecuritySafeCritical]
			static string Concat(object arg0, object arg1, object arg2, object arg3);
			//
			// Summary:
			//     Concatenates four specified instances of System.String.
			//
			// Parameters:
			//   str0:
			//     The first string to concatenate.
			//
			//   str1:
			//     The second string to concatenate.
			//
			//   str2:
			//     The third string to concatenate.
			//
			//   str3:
			//     The fourth string to concatenate.
			//
			// Returns:
			//     The concatenation of str0, str1, str2, and str3.
			//[SecuritySafeCritical]
			static string Concat(string str0, string str1, string str2, string str3);
			//
			// Summary:
			//     Returns a value indicating whether the specified System.String object occurs
			//     within this string.
			//
			// Parameters:
			//   value:
			//     The string to seek.
			//
			// Returns:
			//     true if the value parameter occurs within this string, or if value is the
			//     empty string (""); otherwise, false.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			bool Contains(string value);
			//
			// Summary:
			//     Creates a new instance of System.String with the same value as a specified
			//     System.String.
			//
			// Parameters:
			//   str:
			//     The string to copy.
			//
			// Returns:
			//     A new string with the same value as str.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     str is null.
			//[SecuritySafeCritical]
			static string Copy(string str);
			//
			// Summary:
			//     Copies a specified number of characters from a specified position in this
			//     instance to a specified position in an array of Unicode characters.
			//
			// Parameters:
			//   sourceIndex:
			//     The index of the first character in this instance to copy.
			//
			//   destination:
			//     An array of Unicode characters to which characters in this instance are copied.
			//
			//   destinationIndex:
			//     The index in destination at which the copy operation begins.
			//
			//   count:
			//     The number of characters in this instance to copy to destination.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     destination is null.
			//
			//   System.ArgumentOutOfRangeException:
			//     sourceIndex, destinationIndex, or count is negative -or- count is greater
			//     than the length of the substring from startIndex to the end of this instance
			//     -or- count is greater than the length of the subarray from destinationIndex
			//     to the end of destination
			//[SecuritySafeCritical]
			void CopyTo(int sourceIndex, char[] destination, int destinationIndex, int count);
			//
			// Summary:
			//     Determines whether the end of this string instance matches the specified
			//     string.
			//
			// Parameters:
			//   value:
			//     The string to compare to the substring at the end of this instance.
			//
			// Returns:
			//     true if value matches the end of this instance; otherwise, false.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			bool EndsWith(string value);
			//
			// Summary:
			//     Determines whether the end of this string instance matches the specified
			//     string when compared using the specified comparison option.
			//
			// Parameters:
			//   value:
			//     The string to compare to the substring at the end of this instance.
			//
			//   comparisonType:
			//     One of the enumeration values that determines how this string and value are
			//     compared.
			//
			// Returns:
			//     true if the value parameter matches the end of this string; otherwise, false.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			//
			//   System.ArgumentException:
			//     comparisonType is not a System.StringComparison value.
			//[ComVisible(false)]
			//[SecuritySafeCritical]
			bool EndsWith(string value, StringComparison comparisonType);
			//
			// Summary:
			//     Determines whether the end of this string instance matches the specified
			//     string when compared using the specified culture.
			//
			// Parameters:
			//   value:
			//     The string to compare to the substring at the end of this instance.
			//
			//   ignoreCase:
			//     true to ignore case during the comparison; otherwise, false.
			//
			//   culture:
			//     Cultural information that determines how this instance and value are compared.
			//     If culture is null, the current culture is used.
			//
			// Returns:
			//     true if the value parameter matches the end of this string; otherwise, false.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			bool EndsWith(string value, bool ignoreCase, CultureInfo culture);
			*/

			//
			// Summary:
			//     Determines whether this instance and a specified object, which must also
			//     be a System.String object, have the same value.
			//
			// Parameters:
			//   obj:
			//     The string to compare to this instance.
			//
			// Returns:
			//     true if obj is a System.String and its value is the same as this instance;
			//     otherwise, false.
			//[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
			override bool Equals(object* obj);

			//
			// Summary:
			//     Determines whether this instance and another specified System.String object
			//     have the same value.
			//
			// Parameters:
			//   value:
			//     The string to compare to this instance.
			//
			// Returns:
			//     true if the value of the value parameter is the same as this instance; otherwise,
			//     false.
			//[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			bool Equals(String* value);

			//
			// Summary:
			//     Determines whether two specified System.String objects have the same value.
			//
			// Parameters:
			//   a:
			//     The first string to compare, or null.
			//
			//   b:
			//     The second string to compare, or null.
			//
			// Returns:
			//     true if the value of a is the same as the value of b; otherwise, false.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			static bool Equals(const String& a, const String& b);

			//
			// Summary:
			//     Determines whether this string and a specified System.String object have
			//     the same value. A parameter specifies the culture, case, and sort rules used
			//     in the comparison.
			//
			// Parameters:
			//   value:
			//     The string to compare to this instance.
			//
			//   comparisonType:
			//     One of the enumeration values that specifies how the strings will be compared.
			//
			// Returns:
			//     true if the value of the value parameter is the same as this string; otherwise,
			//     false.
			//
			// Exceptions:
			//   System.ArgumentException:
			//     comparisonType is not a System.StringComparison value.
			//[SecuritySafeCritical]
			bool Equals(const String& value, const StringComparison& comparisonType) const;

			//
			// Summary:
			//     Determines whether two specified T:System.String objects have the same value.
			//     A parameter specifies the culture, case, and sort rules used in the comparison.
			//
			// Parameters:
			//   a:
			//     The first string to compare, or null.
			//
			//   b:
			//     The second string to compare, or null.
			//
			//   comparisonType:
			//     One of the enumeration values that specifies the rules for the comparison.
			//
			// Returns:
			//     true if the value of the a parameter is equal to the value of the b parameter;
			//     otherwise, false.
			//
			// Exceptions:
			//   System.ArgumentException:
			//     comparisonType is not a System.StringComparison value.
			//[SecuritySafeCritical]
			static bool Equals(const String& a, const String& b, const StringComparison& comparisonType);

			const String& ToString() const;

			
			//
			// Summary:
			//     Replaces one or more format items in a specified string with the string representation
			//     of a specified object.
			//
			// Parameters:
			//   format:
			//     A composite format string.
			//
			//   arg0:
			//     The object to format.
			//
			// Returns:
			//     A copy of format in which any format items are replaced by the string representation
			//     of arg0.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     format is null.
			//
			//   System.FormatException:
			//     The format item in format is invalid.-or- The index of a format item is greater
			//     or less than zero.
			//static string Format(string format, object arg0);

			//
			// Summary:
			//     Replaces the format item in a specified string with the string representation
			//     of a corresponding object in a specified array.
			//
			// Parameters:
			//   format:
			//     A composite format string.
			//
			//   args:
			//     An object array that contains zero or more objects to format.
			//
			// Returns:
			//     A copy of format in which the format items have been replaced by the string
			//     representation of the corresponding objects in args.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     format or args is null.
			//
			//   System.FormatException:
			//     format is invalid.-or- The index of a format item is less than zero, or greater
			//     than or equal to the length of the args array.
			//static string Format(string format, params object[] args);

			//
			// Summary:
			//     Replaces the format item in a specified string with the string representation
			//     of a corresponding object in a specified array. A specified parameter supplies
			//     culture-specific formatting information.
			//
			// Parameters:
			//   provider:
			//     An object that supplies culture-specific formatting information.
			//
			//   format:
			//     A composite format string.
			//
			//   args:
			//     An object array that contains zero or more objects to format.
			//
			// Returns:
			//     A copy of format in which the format items have been replaced by the string
			//     representation of the corresponding objects in args.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     format or args is null.
			//
			//   System.FormatException:
			//     format is invalid.-or- The index of a format item is less than zero, or greater
			//     than or equal to the length of the args array.
			//[SecuritySafeCritical]
			//static string Format(IFormatProvider provider, string format, params object[] args);

			//
			// Summary:
			//     Replaces the format items in a specified string with the string representation
			//     of two specified objects.
			//
			// Parameters:
			//   format:
			//     A composite format string.
			//
			//   arg0:
			//     The first object to format.
			//
			//   arg1:
			//     The second object to format.
			//
			// Returns:
			//     A copy of format in which format items are replaced by the string representations
			//     of arg0 and arg1.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     format is null.
			//
			//   System.FormatException:
			//     format is invalid.-or- The index of a format item is less than zero, or greater
			//     than one.
			//static string Format(string format, object arg0, object arg1);

			//
			// Summary:
			//     Replaces the format items in a specified string with the string representation
			//     of three specified objects.
			//
			// Parameters:
			//   format:
			//     A composite format string.
			//
			//   arg0:
			//     The first object to format.
			//
			//   arg1:
			//     The second object to format.
			//
			//   arg2:
			//     The third object to format.
			//
			// Returns:
			//     A copy of format in which the format items have been replaced by the string
			//     representations of arg0, arg1, and arg2.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     format is null.
			//
			//   System.FormatException:
			//     format is invalid.-or- The index of a format item is less than zero, or greater
			//     than two.
			//static string Format(string format, object arg0, object arg1, object arg2);

			//
			// Summary:
			//     Retrieves an object that can iterate through the individual characters in
			//     this string.
			//
			// Returns:
			//     An enumerator object.
			//CharEnumerator GetEnumerator();

			//
			// Summary:
			//     Returns the hash code for this string.
			//
			// Returns:
			//     A 32-bit signed integer hash code.
			//[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
			//[SecuritySafeCritical]
			//override int GetHashCode();

			//
			// Summary:
			//     Returns the System.TypeCode for class System.String.
			//
			// Returns:
			//     The enumerated constant, System.TypeCode.String.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//TypeCode GetTypeCode();

			//
			// Summary:
			//     Reports the index of the first occurrence of the specified Unicode character
			//     in this string.
			//
			// Parameters:
			//   value:
			//     A Unicode character to seek.
			//
			// Returns:
			//     The zero-based index position of value if that character is found, or -1
			//     if it is not.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			public: int IndexOf(char value);

			//
			// Summary:
			//     Reports the index of the first occurrence of the specified string in this
			//     instance.
			//
			// Parameters:
			//   value:
			//     The string to seek.
			//
			// Returns:
			//     The zero-based index position of value if that string is found, or -1 if
			//     it is not. If value is System.String.Empty, the return value is 0.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			int IndexOf(String* value);

			//
			// Summary:
			//     Reports the index of the first occurrence of the specified Unicode character
			//     in this string. The search starts at a specified character position.
			//
			// Parameters:
			//   value:
			//     A Unicode character to seek.
			//
			//   startIndex:
			//     The search starting position.
			//
			// Returns:
			//     The zero-based index position of value if that character is found, or -1
			//     if it is not.
			//
			// Exceptions:
			//   System.ArgumentOutOfRangeException:
			//     startIndex is less than zero or specifies a position beyond the end of this
			//     instance.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			int IndexOf(char value, int startIndex);

			//
			// Summary:
			//     Reports the index of the first occurrence of the specified string in this
			//     instance. The search starts at a specified character position.
			//
			// Parameters:
			//   value:
			//     The string to seek.
			//
			//   startIndex:
			//     The search starting position.
			//
			// Returns:
			//     The zero-based index position of value if that string is found, or -1 if
			//     it is not. If value is System.String.Empty, the return value is startIndex.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			//
			//   System.ArgumentOutOfRangeException:
			//     startIndex is negative.-or- startIndex specifies a position not within this
			//     instance.
			int IndexOf(String* value, int startIndex);
			
			//
			// Summary:
			//     Reports the index of the first occurrence of the specified string in the
			//     current System.String object. A parameter specifies the type of search to
			//     use for the specified string.
			//
			// Parameters:
			//   value:
			//     The string to seek.
			//
			//   comparisonType:
			//     One of the enumeration values that specifies the rules for the search.
			//
			// Returns:
			//     The index position of the value parameter if that string is found, or -1
			//     if it is not. If value is System.String.Empty, the return value is 0.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			//
			//   System.ArgumentException:
			//     comparisonType is not a valid System.StringComparison value.
			//[SecuritySafeCritical]
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//int IndexOf(string value, StringComparison comparisonType);
			//
			// Summary:
			//     Reports the index of the first occurrence of the specified character in this
			//     instance. The search starts at a specified character position and examines
			//     a specified number of character positions.
			//
			// Parameters:
			//   value:
			//     A Unicode character to seek.
			//
			//   startIndex:
			//     The search starting position.
			//
			//   count:
			//     The number of character positions to examine.
			//
			// Returns:
			//     The zero-based index position of value if that character is found, or -1
			//     if it is not.
			//
			// Exceptions:
			//   System.ArgumentOutOfRangeException:
			//     count or startIndex is negative.-or- count + startIndex specifies a position
			//     beyond the end of this instance.
			//[SecuritySafeCritical]
			int IndexOf(char value, int startIndex, int count);
			//
			// Summary:
			//     Reports the index of the first occurrence of the specified string in this
			//     instance. The search starts at a specified character position and examines
			//     a specified number of character positions.
			//
			// Parameters:
			//   value:
			//     The string to seek.
			//
			//   startIndex:
			//     The search starting position.
			//
			//   count:
			//     The number of character positions to examine.
			//
			// Returns:
			//     The zero-based index position of value if that string is found, or -1 if
			//     it is not. If value is System.String.Empty, the return value is startIndex.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			//
			//   System.ArgumentOutOfRangeException:
			//     count or startIndex is negative.-or- count plus startIndex specify a position
			//     not within this instance.
			int IndexOf(String* value, int startIndex, int count);
			//
			// Summary:
			//     Reports the index of the first occurrence of the specified string in the
			//     current System.String object. Parameters specify the starting search position
			//     in the current string and the type of search to use for the specified string.
			//
			// Parameters:
			//   value:
			//     The string to seek.
			//
			//   startIndex:
			//     The search starting position.
			//
			//   comparisonType:
			//     One of the enumeration values that specifies the rules for the search.
			//
			// Returns:
			//     The zero-based index position of the value parameter if that string is found,
			//     or -1 if it is not. If value is System.String.Empty, the return value is
			//     startIndex.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			//
			//   System.ArgumentOutOfRangeException:
			//     startIndex is negative, or specifies a position that is not within this instance.
			//
			//   System.ArgumentException:
			//     comparisonType is not a valid System.StringComparison value.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//int IndexOf(string value, int startIndex, StringComparison comparisonType);
			//
			// Summary:
			//     Reports the index of the first occurrence of the specified string in the
			//     current System.String object. Parameters specify the starting search position
			//     in the current string, the number of characters in the current string to
			//     search, and the type of search to use for the specified string.
			//
			// Parameters:
			//   value:
			//     The string to seek.
			//
			//   startIndex:
			//     The search starting position.
			//
			//   count:
			//     The number of character positions to examine.
			//
			//   comparisonType:
			//     One of the enumeration values that specifies the rules for the search.
			//
			// Returns:
			//     The zero-based index position of the value parameter if that string is found,
			//     or -1 if it is not. If value is System.String.Empty, the return value is
			//     startIndex.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			//
			//   System.ArgumentOutOfRangeException:
			//     count or startIndex is negative.-or- count plus startIndex specify a position
			//     that is not within this instance.
			//
			//   System.ArgumentException:
			//     comparisonType is not a valid System.StringComparison value.
			//int IndexOf(string value, int startIndex, int count, StringComparison comparisonType);
			//
			// Summary:
			//     Reports the index of the first occurrence in this instance of any character
			//     in a specified array of Unicode characters.
			//
			// Parameters:
			//   anyOf:
			//     A Unicode character array containing one or more characters to seek.
			//
			// Returns:
			//     The zero-based index position of the first occurrence in this instance where
			//     any character in anyOf was found; -1 if no character in anyOf was found.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     anyOf is null.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//int IndexOfAny(char[] anyOf);
			//
			// Summary:
			//     Reports the index of the first occurrence in this instance of any character
			//     in a specified array of Unicode characters. The search starts at a specified
			//     character position.
			//
			// Parameters:
			//   anyOf:
			//     A Unicode character array containing one or more characters to seek.
			//
			//   startIndex:
			//     The search starting position.
			//
			// Returns:
			//     The zero-based index position of the first occurrence in this instance where
			//     any character in anyOf was found; -1 if no character in anyOf was found.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     anyOf is null.
			//
			//   System.ArgumentOutOfRangeException:
			//     startIndex is negative.-or- startIndex is greater than the number of characters
			//     in this instance.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//int IndexOfAny(char[] anyOf, int startIndex);
			//
			// Summary:
			//     Reports the index of the first occurrence in this instance of any character
			//     in a specified array of Unicode characters. The search starts at a specified
			//     character position and examines a specified number of character positions.
			//
			// Parameters:
			//   anyOf:
			//     A Unicode character array containing one or more characters to seek.
			//
			//   startIndex:
			//     The search starting position.
			//
			//   count:
			//     The number of character positions to examine.
			//
			// Returns:
			//     The zero-based index position of the first occurrence in this instance where
			//     any character in anyOf was found; -1 if no character in anyOf was found.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     anyOf is null.
			//
			//   System.ArgumentOutOfRangeException:
			//     count or startIndex is negative.-or- count + startIndex is greater than the
			//     number of characters in this instance.
			//[SecuritySafeCritical]
			//int IndexOfAny(char[] anyOf, int startIndex, int count);
			//
			// Summary:
			//     Inserts a specified instance of System.String at a specified index position
			//     in this instance.
			//
			// Parameters:
			//   startIndex:
			//     The index position of the insertion.
			//
			//   value:
			//     The string to insert.
			//
			// Returns:
			//     A new string that is equivalent to this instance, but with value inserted
			//     at position startIndex.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			//
			//   System.ArgumentOutOfRangeException:
			//     startIndex is negative or greater than the length of this instance.
			//[SecuritySafeCritical]
			//string Insert(int startIndex, string value);
			//
			// Summary:
			//     Retrieves the system's reference to the specified System.String.
			//
			// Parameters:
			//   str:
			//     A string to search for in the intern pool.
			//
			// Returns:
			//     The system's reference to str, if it is interned; otherwise, a new reference
			//     to a string with the value of str.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     str is null.
			//[SecuritySafeCritical]
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//static string Intern(string str);
			//
			// Summary:
			//     Retrieves a reference to a specified System.String.
			//
			// Parameters:
			//   str:
			//     The string to search for in the intern pool.
			//
			// Returns:
			//     A reference to str if it is in the common language runtime intern pool; otherwise,
			//     null.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     str is null.
			//[SecuritySafeCritical]
			//static string IsInterned(string str);
			//
			// Summary:
			//     Indicates whether this string is in Unicode normalization form C.
			//
			// Returns:
			//     true if this string is in normalization form C; otherwise, false.
			//
			// Exceptions:
			//   System.ArgumentException:
			//     The current instance contains invalid Unicode characters.
			//bool IsNormalized();
			//
			// Summary:
			//     Indicates whether this string is in the specified Unicode normalization form.
			//
			// Parameters:
			//   normalizationForm:
			//     A Unicode normalization form.
			//
			// Returns:
			//     true if this string is in the normalization form specified by the normalizationForm
			//     parameter; otherwise, false.
			//
			// Exceptions:
			//   System.ArgumentException:
			//     The current instance contains invalid Unicode characters.
			//[SecuritySafeCritical]
			//bool IsNormalized(NormalizationForm normalizationForm);
			//
			// Summary:
			//     Indicates whether the specified string is null or an System.String.Empty
			//     string.
			//
			// Parameters:
			//   value:
			//     The string to test.
			//
			// Returns:
			//     true if the value parameter is null or an empty string (""); otherwise, false.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//static bool IsNullOrEmpty(string value);
			//
			// Summary:
			//     Indicates whether a specified string is null, empty, or consists only of
			//     white-space characters.
			//
			// Parameters:
			//   value:
			//     The string to test.
			//
			// Returns:
			//     true if the value parameter is null or System.String.Empty, or if value consists
			//     exclusively of white-space characters.
			//static bool IsNullOrWhiteSpace(string value);
			//
			// Summary:
			//     Concatenates the members of a constructed System.Collections.Generic.IEnumerable<T>
			//     collection of type System.String, using the specified separator between each
			//     member.
			//
			// Parameters:
			//   separator:
			//     The string to use as a separator.
			//
			//   values:
			//     A collection that contains the strings to concatenate.
			//
			// Returns:
			//     A string that consists of the members of values delimited by the separator
			//     string.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     values is null.
			//[ComVisible(false)]
			//static string Join(string separator, IEnumerable<string> values);
			//
			// Summary:
			//     Concatenates the members of a string collection, using the specified separator
			//     between each member.
			//
			// Parameters:
			//   separator:
			//     The string to use as a separator.
			//
			//   values:
			//     A collection that contains the objects to concatenate.
			//
			// Type parameters:
			//   T:
			//     The type of the members of values.
			//
			// Returns:
			//     A string that consists of the members of values delimited by the separator
			//     string.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     values is null.
			//[ComVisible(false)]
			//static string Join<T>(string separator, IEnumerable<T> values);
			//
			// Summary:
			//     Concatenates the elements of an object array, using the specified separator
			//     between each element.
			//
			// Parameters:
			//   separator:
			//     The string to use as a separator.
			//
			//   values:
			//     An array that contains the elements to concatenate.
			//
			// Returns:
			//     A string that consists of the elements of values delimited by the separator
			//     string.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     values is null.
			//[ComVisible(false)]
			//static string Join(string separator, params object[] values);
			//
			// Summary:
			//     Concatenates all the elements of a string array, using the specified separator
			//     between each element.
			//
			// Parameters:
			//   separator:
			//     The string to use as a separator.
			//
			//   value:
			//     An array that contains the elements to concatenate.
			//
			// Returns:
			//     A string that consists of the elements in value delimited by the separator
			//     string.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			//static string Join(string separator, params string[] value);
			//
			// Summary:
			//     Concatenates the specified elements of a string array, using the specified
			//     separator between each element.
			//
			// Parameters:
			//   separator:
			//     The string to use as a separator.
			//
			//   value:
			//     An array that contains the elements to concatenate.
			//
			//   startIndex:
			//     The first element in value to use.
			//
			//   count:
			//     The number of elements of value to use.
			//
			// Returns:
			//     A string that consists of the strings in value delimited by the separator
			//     string. -or-System.String.Empty if count is zero, value has no elements,
			//     or separator and all the elements of value are System.String.Empty.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			//
			//   System.ArgumentOutOfRangeException:
			//     startIndex or count is less than 0.-or- startIndex plus count is greater
			//     than the number of elements in value.
			//
			//   System.OutOfMemoryException:
			//     Out of memory.
			//[SecuritySafeCritical]
			//static string Join(string separator, string[] value, int startIndex, int count);
			//
			// Summary:
			//     Reports the index position of the last occurrence of a specified Unicode
			//     character within this instance.
			//
			// Parameters:
			//   value:
			//     The Unicode character to seek.
			//
			// Returns:
			//     The zero-based index position of value if that character is found, or -1
			//     if it is not.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			public: int LastIndexOf(char value);
			//
			// Summary:
			//     Reports the index position of the last occurrence of a specified string within
			//     this instance.
			//
			// Parameters:
			//   value:
			//     The string to seek.
			//
			// Returns:
			//     The zero-based index position of value if that string is found, or -1 if
			//     it is not. If value is System.String.Empty, the return value is the last
			//     index position in this instance.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			//[SecuritySafeCritical]
			int LastIndexOf(String* value);
			//
			// Summary:
			//     Reports the index position of the last occurrence of a specified Unicode
			//     character within this instance. The search starts at a specified character
			//     position.
			//
			// Parameters:
			//   value:
			//     The Unicode character to seek.
			//
			//   startIndex:
			//     The starting position of a substring within this instance.
			//
			// Returns:
			//     The zero-based index position of value if that character is found, or -1
			//     if it is not.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			//
			//   System.ArgumentOutOfRangeException:
			//     startIndex is less than zero or greater than the length of this instance.
			int LastIndexOf(char value, int startIndex);
			//
			// Summary:
			//     Reports the index position of the last occurrence of a specified string within
			//     this instance. The search starts at a specified character position.
			//
			// Parameters:
			//   value:
			//     The string to seek.
			//
			//   startIndex:
			//     The search starting position.
			//
			// Returns:
			//     The zero-based index position of value if that string is found, or -1 if
			//     it is not. If value is System.String.Empty, the return value is startIndex.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			//
			//   System.ArgumentOutOfRangeException:
			//     startIndex is less than zero or specifies a position not within this instance.
			int LastIndexOf(String* value, int startIndex);
			//
			// Summary:
			//     Reports the index of the last occurrence of a specified string within the
			//     current System.String object. A parameter specifies the type of search to
			//     use for the specified string.
			//
			// Parameters:
			//   value:
			//     The string to seek.
			//
			//   comparisonType:
			//     One of the enumeration values that specifies the rules for the search.
			//
			// Returns:
			//     The index position of the value parameter if that string is found, or -1
			//     if it is not. If value is System.String.Empty, the return value is the last
			//     index position in this instance.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			//
			//   System.ArgumentException:
			//     comparisonType is not a valid System.StringComparison value.
			//[SecuritySafeCritical]
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//int LastIndexOf(string value, StringComparison comparisonType);
			//
			// Summary:
			//     Reports the index position of the last occurrence of the specified Unicode
			//     character in a substring within this instance. The search starts at a specified
			//     character position and examines a specified number of character positions.
			//
			// Parameters:
			//   value:
			//     The Unicode character to seek.
			//
			//   startIndex:
			//     The starting position of a substring within this instance.
			//
			//   count:
			//     The number of character positions to examine.
			//
			// Returns:
			//     The zero-based index position of value if that character is found, or -1
			//     if it is not.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			//
			//   System.ArgumentOutOfRangeException:
			//     startIndex is less than zero, or greater than or equal to the length of this
			//     instance.-or-startIndex + 1 - count is less than zero.
			//[SecuritySafeCritical]
			int LastIndexOf(char value, int startIndex, int count);
			//
			// Summary:
			//     Reports the index position of the last occurrence of a specified string within
			//     this instance. The search starts at a specified character position and examines
			//     a specified number of character positions.
			//
			// Parameters:
			//   value:
			//     The string to seek.
			//
			//   startIndex:
			//     The search starting position.
			//
			//   count:
			//     The number of character positions to examine.
			//
			// Returns:
			//     The zero-based index position of value if that string is found, or -1 if
			//     it is not. If value is System.String.Empty, the return value is startIndex.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			//
			//   System.ArgumentOutOfRangeException:
			//     count or startIndex is negative.-or- startIndex is greater than the length
			//     of this instance.-or-startIndex + 1 - count specifies a position that is
			//     not within this instance.
			int LastIndexOf(String* value, int startIndex, int count);
			//
			// Summary:
			//     Reports the index of the last occurrence of a specified string within the
			//     current System.String object. Parameters specify the starting search position
			//     in the current string, and type of search to use for the specified string.
			//
			// Parameters:
			//   value:
			//     The string to seek.
			//
			//   startIndex:
			//     The search starting position.
			//
			//   comparisonType:
			//     One of the enumeration values that specifies the rules for the search.
			//
			// Returns:
			//     The index position of the value parameter if that string is found, or -1
			//     if it is not. If value is System.String.Empty, the return value is startIndex.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			//
			//   System.ArgumentOutOfRangeException:
			//     startIndex is less than zero or specifies a position that is not within this
			//     instance.
			//
			//   System.ArgumentException:
			//     comparisonType is not a valid System.StringComparison value.
			//int LastIndexOf(string value, int startIndex, StringComparison comparisonType);
			//
			// Summary:
			//     Reports the index position of the last occurrence of a specified string within
			//     this instance. Parameters specify the starting search position in the current
			//     string, the number of characters in the current string to search, and the
			//     type of search to use for the specified string.
			//
			// Parameters:
			//   value:
			//     The string to seek.
			//
			//   startIndex:
			//     The search starting position.
			//
			//   count:
			//     The number of character positions to examine.
			//
			//   comparisonType:
			//     One of the enumeration values that specifies the rules for the search.
			//
			// Returns:
			//     The index position of the value parameter if that string is found, or -1
			//     if it is not. If value is System.String.Empty, the return value is startIndex.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			//
			//   System.ArgumentOutOfRangeException:
			//     count or startIndex is negative.-or- startIndex is greater than the length
			//     of this instance.-or-startIndex + 1 - count specifies a position that is
			//     not within this instance.
			//
			//   System.ArgumentException:
			//     comparisonType is not a valid System.StringComparison value.
			//int LastIndexOf(string value, int startIndex, int count, StringComparison comparisonType);
			//
			// Summary:
			//     Reports the index position of the last occurrence in this instance of one
			//     or more characters specified in a Unicode array.
			//
			// Parameters:
			//   anyOf:
			//     A Unicode character array containing one or more characters to seek.
			//
			// Returns:
			//     The index position of the last occurrence in this instance where any character
			//     in anyOf was found; -1 if no character in anyOf was found.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     anyOf is null.
			//int LastIndexOfAny(char[] anyOf);
			//
			// Summary:
			//     Reports the index position of the last occurrence in this instance of one
			//     or more characters specified in a Unicode array. The search starts at a specified
			//     character position.
			//
			// Parameters:
			//   anyOf:
			//     A Unicode character array containing one or more characters to seek.
			//
			//   startIndex:
			//     The search starting position.
			//
			// Returns:
			//     The index position of the last occurrence in this instance where any character
			//     in anyOf was found; -1 if no character in anyOf was found.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     anyOf is null.
			//
			//   System.ArgumentOutOfRangeException:
			//     startIndex specifies a position not within this instance.
			//int LastIndexOfAny(char[] anyOf, int startIndex);
			//
			// Summary:
			//     Reports the index position of the last occurrence in this instance of one
			//     or more characters specified in a Unicode array. The search starts at a specified
			//     character position and examines a specified number of character positions.
			//
			// Parameters:
			//   anyOf:
			//     A Unicode character array containing one or more characters to seek.
			//
			//   startIndex:
			//     The search starting position.
			//
			//   count:
			//     The number of character positions to examine.
			//
			// Returns:
			//     The index position of the last occurrence in this instance where any character
			//     in anyOf was found; -1 if no character in anyOf was found.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     anyOf is null.
			//
			//   System.ArgumentOutOfRangeException:
			//     count or startIndex is negative.-or- startIndex minus count specify a position
			//     that is not within this instance.
			//[SecuritySafeCritical]
			//int LastIndexOfAny(char[] anyOf, int startIndex, int count);
			//
			// Summary:
			//     Returns a new string whose textual value is the same as this string, but
			//     whose binary representation is in Unicode normalization form C.
			//
			// Returns:
			//     A new, normalized string whose textual value is the same as this string,
			//     but whose binary representation is in normalization form C.
			//
			// Exceptions:
			//   System.ArgumentException:
			//     The current instance contains invalid Unicode characters.
			//string Normalize();
			//
			// Summary:
			//     Returns a new string whose textual value is the same as this string, but
			//     whose binary representation is in the specified Unicode normalization form.
			//
			// Parameters:
			//   normalizationForm:
			//     A Unicode normalization form.
			//
			// Returns:
			//     A new string whose textual value is the same as this string, but whose binary
			//     representation is in the normalization form specified by the normalizationForm
			//     parameter.
			//
			// Exceptions:
			//   System.ArgumentException:
			//     The current instance contains invalid Unicode characters.
			//[SecuritySafeCritical]
			//string Normalize(NormalizationForm normalizationForm);
			//
			// Summary:
			//     Returns a new string that right-aligns the characters in this instance by
			//     padding them with spaces on the left, for a specified total length.
			//
			// Parameters:
			//   totalWidth:
			//     The number of characters in the resulting string, equal to the number of
			//     original characters plus any additional padding characters.
			//
			// Returns:
			//     A new string that is equivalent to this instance, but right-aligned and padded
			//     on the left with as many spaces as needed to create a length of totalWidth.
			//     Or, if totalWidth is less than the length of this instance, a new string
			//     that is identical to this instance.
			//
			// Exceptions:
			//   System.ArgumentOutOfRangeException:
			//     totalWidth is less than zero.
			//string PadLeft(int totalWidth);
			//
			// Summary:
			//     Returns a new string that right-aligns the characters in this instance by
			//     padding them on the left with a specified Unicode character, for a specified
			//     total length.
			//
			// Parameters:
			//   totalWidth:
			//     The number of characters in the resulting string, equal to the number of
			//     original characters plus any additional padding characters.
			//
			//   paddingChar:
			//     A Unicode padding character.
			//
			// Returns:
			//     A new string that is equivalent to this instance, but right-aligned and padded
			//     on the left with as many paddingChar characters as needed to create a length
			//     of totalWidth. Or, if totalWidth is less than the length of this instance,
			//     a new string that is identical to this instance.
			//
			// Exceptions:
			//   System.ArgumentOutOfRangeException:
			//     totalWidth is less than zero.
			//string PadLeft(int totalWidth, char paddingChar);
			//
			// Summary:
			//     Returns a new string that left-aligns the characters in this string by padding
			//     them with spaces on the right, for a specified total length.
			//
			// Parameters:
			//   totalWidth:
			//     The number of characters in the resulting string, equal to the number of
			//     original characters plus any additional padding characters.
			//
			// Returns:
			//     A new string that is equivalent to this instance, but left-aligned and padded
			//     on the right with as many spaces as needed to create a length of totalWidth.
			//     Or, if totalWidth is less than the length of this instance, a new string
			//     that is identical to this instance.
			//
			// Exceptions:
			//   System.ArgumentOutOfRangeException:
			//     totalWidth is less than zero.
			//string PadRight(int totalWidth);
			//
			// Summary:
			//     Returns a new string that left-aligns the characters in this string by padding
			//     them on the right with a specified Unicode character, for a specified total
			//     length.
			//
			// Parameters:
			//   totalWidth:
			//     The number of characters in the resulting string, equal to the number of
			//     original characters plus any additional padding characters.
			//
			//   paddingChar:
			//     A Unicode padding character.
			//
			// Returns:
			//     A new string that is equivalent to this instance, but left-aligned and padded
			//     on the right with as many paddingChar characters as needed to create a length
			//     of totalWidth. Or, if totalWidth is less than the length of this instance,
			//     a new string that is identical to this instance.
			//
			// Exceptions:
			//   System.ArgumentOutOfRangeException:
			//     totalWidth is less than zero.
			//string PadRight(int totalWidth, char paddingChar);
			//
			// Summary:
			//     Deletes all the characters from this string beginning at a specified position
			//     and continuing through the last position.
			//
			// Parameters:
			//   startIndex:
			//     The zero-based position to begin deleting characters.
			//
			// Returns:
			//     A new string that is equivalent to this string except for the removed characters.
			//
			// Exceptions:
			//   System.ArgumentOutOfRangeException:
			//     startIndex is less than zero.-or- startIndex specifies a position that is
			//     not within this string.
			//string Remove(int startIndex);
			//
			// Summary:
			//     Deletes a specified number of characters from this instance beginning at
			//     a specified position.
			//
			// Parameters:
			//   startIndex:
			//     The zero-based position to begin deleting characters.
			//
			//   count:
			//     The number of characters to delete.
			//
			// Returns:
			//     A new string that is equivalent to this instance except for the removed characters.
			//
			// Exceptions:
			//   System.ArgumentOutOfRangeException:
			//     Either startIndex or count is less than zero.-or- startIndex plus count specify
			//     a position outside this instance.
			//[SecuritySafeCritical]
			//string Remove(int startIndex, int count);
			//
			// Summary:
			//     Returns a new string in which all occurrences of a specified Unicode character
			//     in this instance are replaced with another specified Unicode character.
			//
			// Parameters:
			//   oldChar:
			//     The Unicode character to be replaced.
			//
			//   newChar:
			//     The Unicode character to replace all occurrences of oldChar.
			//
			// Returns:
			//     A string that is equivalent to this instance except that all instances of
			//     oldChar are replaced with newChar.
			//[SecuritySafeCritical]
			public: GC_PTR<String> Replace(char oldChar, char newChar);

			//
			// Summary:
			//     Returns a new string in which all occurrences of a specified string in the
			//     current instance are replaced with another specified string.
			//
			// Parameters:
			//   oldValue:
			//     The string to be replaced.
			//
			//   newValue:
			//     The string to replace all occurrences of oldValue.
			//
			// Returns:
			//     A string that is equivalent to the current string except that all instances
			//     of oldValue are replaced with newValue.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     oldValue is null.
			//
			//   System.ArgumentException:
			//     oldValue is the empty string ("").
			//[SecuritySafeCritical]
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//string Replace(string oldValue, string newValue);

			public: GC_PTR<Array<GC_PTR<String>>> Split(char separator) const;

			//
			// Summary:
			//     Returns a string array that contains the substrings in this instance that
			//     are delimited by elements of a specified Unicode character array.
			//
			// Parameters:
			//   separator:
			//     An array of Unicode characters that delimit the substrings in this instance,
			//     an empty array that contains no delimiters, or null.
			//
			// Returns:
			//     An array whose elements contain the substrings in this instance that are
			//     delimited by one or more characters in separator. For more information, see
			//     the Remarks section.
			GC_PTR<Array<GC_PTR<String>>> Split(Array<char>* separator);

			//
			// Summary:
			//     Returns a string array that contains the substrings in this instance that
			//     are delimited by elements of a specified Unicode character array. A parameter
			//     specifies the maximum number of substrings to return.
			//
			// Parameters:
			//   separator:
			//     An array of Unicode characters that delimit the substrings in this instance,
			//     an empty array that contains no delimiters, or null.
			//
			//   count:
			//     The maximum number of substrings to return.
			//
			// Returns:
			//     An array whose elements contain the substrings in this instance that are
			//     delimited by one or more characters in separator. For more information, see
			//     the Remarks section.
			//
			// Exceptions:
			//   System.ArgumentOutOfRangeException:
			//     count is negative.
			//string[] Split(char[] separator, int count);
			//
			// Summary:
			//     Returns a string array that contains the substrings in this string that are
			//     delimited by elements of a specified Unicode character array. A parameter
			//     specifies whether to return empty array elements.
			//
			// Parameters:
			//   separator:
			//     An array of Unicode characters that delimit the substrings in this string,
			//     an empty array that contains no delimiters, or null.
			//
			//   options:
			//     System.StringSplitOptions.RemoveEmptyEntries to omit empty array elements
			//     from the array returned; or System.StringSplitOptions.None to include empty
			//     array elements in the array returned.
			//
			// Returns:
			//     An array whose elements contain the substrings in this string that are delimited
			//     by one or more characters in separator. For more information, see the Remarks
			//     section.
			//
			// Exceptions:
			//   System.ArgumentException:
			//     options is not one of the System.StringSplitOptions values.
			//[ComVisible(false)]
			//string[] Split(char[] separator, StringSplitOptions options);
			//
			// Summary:
			//     Returns a string array that contains the substrings in this string that are
			//     delimited by elements of a specified string array. A parameter specifies
			//     whether to return empty array elements.
			//
			// Parameters:
			//   separator:
			//     An array of strings that delimit the substrings in this string, an empty
			//     array that contains no delimiters, or null.
			//
			//   options:
			//     System.StringSplitOptions.RemoveEmptyEntries to omit empty array elements
			//     from the array returned; or System.StringSplitOptions.None to include empty
			//     array elements in the array returned.
			//
			// Returns:
			//     An array whose elements contain the substrings in this string that are delimited
			//     by one or more strings in separator. For more information, see the Remarks
			//     section.
			//
			// Exceptions:
			//   System.ArgumentException:
			//     options is not one of the System.StringSplitOptions values.
			//[ComVisible(false)]
			//string[] Split(string[] separator, StringSplitOptions options);
			//
			// Summary:
			//     Returns a string array that contains the substrings in this string that are
			//     delimited by elements of a specified Unicode character array. Parameters
			//     specify the maximum number of substrings to return and whether to return
			//     empty array elements.
			//
			// Parameters:
			//   separator:
			//     An array of Unicode characters that delimit the substrings in this string,
			//     an empty array that contains no delimiters, or null.
			//
			//   count:
			//     The maximum number of substrings to return.
			//
			//   options:
			//     System.StringSplitOptions.RemoveEmptyEntries to omit empty array elements
			//     from the array returned; or System.StringSplitOptions.None to include empty
			//     array elements in the array returned.
			//
			// Returns:
			//     An array whose elements contain the substrings in this string that are delimited
			//     by one or more characters in separator. For more information, see the Remarks
			//     section.
			//
			// Exceptions:
			//   System.ArgumentOutOfRangeException:
			//     count is negative.
			//
			//   System.ArgumentException:
			//     options is not one of the System.StringSplitOptions values.
			//[ComVisible(false)]
			//string[] Split(char[] separator, int count, StringSplitOptions options);
			//
			// Summary:
			//     Returns a string array that contains the substrings in this string that are
			//     delimited by elements of a specified string array. Parameters specify the
			//     maximum number of substrings to return and whether to return empty array
			//     elements.
			//
			// Parameters:
			//   separator:
			//     An array of strings that delimit the substrings in this string, an empty
			//     array that contains no delimiters, or null.
			//
			//   count:
			//     The maximum number of substrings to return.
			//
			//   options:
			//     System.StringSplitOptions.RemoveEmptyEntries to omit empty array elements
			//     from the array returned; or System.StringSplitOptions.None to include empty
			//     array elements in the array returned.
			//
			// Returns:
			//     An array whose elements contain the substrings in this string that are delimited
			//     by one or more strings in separator. For more information, see the Remarks
			//     section.
			//
			// Exceptions:
			//   System.ArgumentOutOfRangeException:
			//     count is negative.
			//
			//   System.ArgumentException:
			//     options is not one of the System.StringSplitOptions values.
			//[ComVisible(false)]
			//string[] Split(string[] separator, int count, StringSplitOptions options);
			//
			// Summary:
			//     Determines whether the beginning of this string instance matches the specified
			//     string.
			//
			// Parameters:
			//   value:
			//     The string to compare.
			//
			// Returns:
			//     true if value matches the beginning of this string; otherwise, false.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//bool StartsWith(string value);
			//
			// Summary:
			//     Determines whether the beginning of this string instance matches the specified
			//     string when compared using the specified comparison option.
			//
			// Parameters:
			//   value:
			//     The string to compare.
			//
			//   comparisonType:
			//     One of the enumeration values that determines how this string and value are
			//     compared.
			//
			// Returns:
			//     true if the value parameter matches the beginning of this string; otherwise,
			//     false.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			//
			//   System.ArgumentException:
			//     comparisonType is not a System.StringComparison value.
			//[ComVisible(false)]
			//[SecuritySafeCritical]
			//bool StartsWith(string value, StringComparison comparisonType);
			//
			// Summary:
			//     Determines whether the beginning of this string instance matches the specified
			//     string when compared using the specified culture.
			//
			// Parameters:
			//   value:
			//     The string to compare.
			//
			//   ignoreCase:
			//     true to ignore case during the comparison; otherwise, false.
			//
			//   culture:
			//     Cultural information that determines how this string and value are compared.
			//     If culture is null, the current culture is used.
			//
			// Returns:
			//     true if the value parameter matches the beginning of this string; otherwise,
			//     false.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     value is null.
			//bool StartsWith(string value, bool ignoreCase, CultureInfo culture);
			//
			// Summary:
			//     Retrieves a substring from this instance. The substring starts at a specified
			//     character position.
			//
			// Parameters:
			//   startIndex:
			//     The zero-based starting character position of a substring in this instance.
			//
			// Returns:
			//     A string that is equivalent to the substring that begins at startIndex in
			//     this instance, or System.String.Empty if startIndex is equal to the length
			//     of this instance.
			//
			// Exceptions:
			//   System.ArgumentOutOfRangeException:
			//     startIndex is less than zero or greater than the length of this instance.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			GC_PTR<String> Substring(int startIndex);

			//
			// Summary:
			//     Retrieves a substring from this instance. The substring starts at a specified
			//     character position and has a specified length.
			//
			// Parameters:
			//   startIndex:
			//     The zero-based starting character position of a substring in this instance.
			//
			//   length:
			//     The number of characters in the substring.
			//
			// Returns:
			//     A string that is equivalent to the substring of length length that begins
			//     at startIndex in this instance, or System.String.Empty if startIndex is equal
			//     to the length of this instance and length is zero.
			//
			// Exceptions:
			//   System.ArgumentOutOfRangeException:
			//     startIndex plus length indicates a position not within this instance.-or-
			//     startIndex or length is less than zero.
			//[SecuritySafeCritical]
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			GC_PTR<String> Substring(int startIndex, int length);

			//
			// Summary:
			//     Copies the characters in this instance to a Unicode character array.
			//
			// Returns:
			//     A Unicode character array whose elements are the individual characters of
			//     this instance. If this instance is an empty string, the returned array is
			//     empty and has a zero length.
			//[SecuritySafeCritical]
			//char[] ToCharArray();
			//
			// Summary:
			//     Copies the characters in a specified substring in this instance to a Unicode
			//     character array.
			//
			// Parameters:
			//   startIndex:
			//     The starting position of a substring in this instance.
			//
			//   length:
			//     The length of the substring in this instance.
			//
			// Returns:
			//     A Unicode character array whose elements are the length number of characters
			//     in this instance starting from character position startIndex.
			//
			// Exceptions:
			//   System.ArgumentOutOfRangeException:
			//     startIndex or length is less than zero.-or- startIndex plus length is greater
			//     than the length of this instance.
			//[SecuritySafeCritical]
			//char[] ToCharArray(int startIndex, int length);
			//
			// Summary:
			//     Returns a copy of this string converted to lowercase.
			//
			// Returns:
			//     A string in lowercase.
			//string ToLower();
			//
			// Summary:
			//     Returns a copy of this string converted to lowercase, using the casing rules
			//     of the specified culture.
			//
			// Parameters:
			//   culture:
			//     An object that supplies culture-specific casing rules.
			//
			// Returns:
			//     The lowercase equivalent of the current string.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     culture is null.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//string ToLower(CultureInfo culture);
			//
			// Summary:
			//     Returns a copy of this System.String object converted to lowercase using
			//     the casing rules of the invariant culture.
			//
			// Returns:
			//     The lowercase equivalent of the current string.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//string ToLowerInvariant();
			//
			// Summary:
			//     Returns this instance of System.String; no actual conversion is performed.
			//
			// Returns:
			//     The current string.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			public: override GC_PTR<String> ToString();
			//
			// Summary:
			//     Returns this instance of System.String; no actual conversion is performed.
			//
			// Parameters:
			//   provider:
			//     (Reserved) An object that supplies culture-specific formatting information.
			//
			// Returns:
			//     The current string.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//string ToString(IFormatProvider provider);
			//
			// Summary:
			//     Returns a copy of this string converted to uppercase.
			//
			// Returns:
			//     The uppercase equivalent of the current string.
			//string ToUpper();
			//
			// Summary:
			//     Returns a copy of this string converted to uppercase, using the casing rules
			//     of the specified culture.
			//
			// Parameters:
			//   culture:
			//     An object that supplies culture-specific casing rules.
			//
			// Returns:
			//     The uppercase equivalent of the current string.
			//
			// Exceptions:
			//   System.ArgumentNullException:
			//     culture is null.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//string ToUpper(CultureInfo culture);
			//
			// Summary:
			//     Returns a copy of this System.String object converted to uppercase using
			//     the casing rules of the invariant culture.
			//
			// Returns:
			//     The uppercase equivalent of the current string.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//string ToUpperInvariant();
			//
			// Summary:
			//     Removes all leading and trailing white-space characters from the current
			//     System.String object.
			//
			// Returns:
			//     The string that remains after all white-space characters are removed from
			//     the start and end of the current string.
			GC_PTR<String> Trim();
			//
			// Summary:
			//     Removes all leading and trailing occurrences of a set of characters specified
			//     in an array from the current System.String object.
			//
			// Parameters:
			//   trimChars:
			//     An array of Unicode characters to remove, or null.
			//
			// Returns:
			//     The string that remains after all occurrences of the characters in the trimChars
			//     parameter are removed from the start and end of the current string. If trimChars
			//     is null or an empty array, white-space characters are removed instead.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//string Trim(params char[] trimChars);
			//
			// Summary:
			//     Removes all trailing occurrences of a set of characters specified in an array
			//     from the current System.String object.
			//
			// Parameters:
			//   trimChars:
			//     An array of Unicode characters to remove, or null.
			//
			// Returns:
			//     The string that remains after all occurrences of the characters in the trimChars
			//     parameter are removed from the end of the current string. If trimChars is
			//     null or an empty array, Unicode white-space characters are removed instead.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//string TrimEnd(params char[] trimChars);
			//
			// Summary:
			//     Removes all leading occurrences of a set of characters specified in an array
			//     from the current System.String object.
			//
			// Parameters:
			//   trimChars:
			//     An array of Unicode characters to remove, or null.
			//
			// Returns:
			//     The string that remains after all occurrences of characters in the trimChars
			//     parameter are removed from the start of the current string. If trimChars
			//     is null or an empty array, white-space characters are removed instead.
			//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
			//string TrimStart(params char[] trimChars);
			
		};

		// Summary:
		//     Determines whether two specified strings have different values.
		//
		// Parameters:
		//   a:
		//     The first string to compare, or null.
		//
		//   b:
		//     The second string to compare, or null.
		//
		// Returns:
		//     true if the value of a is different from the value of b; otherwise, false.
		//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
		inline bool operator !=(const String& a, const String& b)
		{
			return !(operator ==(a, b));
		}

		//
		// Summary:
		//     Determines whether two specified strings have the same value.
		//
		// Parameters:
		//   a:
		//     The first string to compare, or null.
		//
		//   b:
		//     The second string to compare, or null.
		//
		// Returns:
		//     true if the value of a is the same as the value of b; otherwise, false.
		//[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
		inline bool operator ==(const String& a, const String& b)
		{
			if(a.c_str() == b.c_str())
			{
				return true;
			}
			else if(a.Length == b.Length)
			{
				int length = a.Length;
				const char* A = a.c_str();
				const char* B = b.c_str();
				int i = 0;
				for (; A[i] == B[i] && i < length; i++);

				if(i == length)
				{
					return true;
				}
			}

			return false;
		}

		// Summary:
		//     Represents text as a series of Unicode characters.
		typedef String string;
	}
}

// Constant string.
extern GC_PTR<Riccsson::System::String> STR(const char* static_const_string);

#endif